import os
from dataclasses import dataclass
from typing import Dict, Optional
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

@dataclass
class ExchangeConfig:
    """交易所配置"""
    api_key: str
    api_secret: str
    passphrase: Optional[str] = None
    is_testnet: bool = True

@dataclass
class RiskConfig:
    """风险管理配置"""
    max_position_size: float  # 最大仓位大小（占总资金比例）
    max_drawdown: float      # 最大回撤限制
    stop_loss_rate: float    # 止损比例
    max_daily_loss: float    # 每日最大亏损限制
    position_sizing_factor: float  # 仓位大小因子

@dataclass
class AnalysisConfig:
    """分析配置"""
    technical_indicators: list  # 使用的技术指标列表
    ml_features: list          # 机器学习特征列表
    lookback_period: int       # 回看周期

# 交易所配置
EXCHANGES = {
    'okx': ExchangeConfig(
        api_key=os.getenv('OKX_API_KEY', ''),
        api_secret=os.getenv('OKX_SECRET_KEY', ''),
        passphrase=os.getenv('OKX_PASSPHRASE', ''),
        is_testnet=True
    ),
    'binance': ExchangeConfig(
        api_key=os.getenv('BINANCE_API_KEY', ''),
        api_secret=os.getenv('BINANCE_SECRET_KEY', ''),
        is_testnet=True
    )
}

# 默认分析配置
DEFAULT_ANALYSIS_CONFIG = AnalysisConfig(
    technical_indicators=[
        'RSI', 'MACD', 'BB', 'EMA', 'SMA',
        'ATR', 'OBV', 'VWAP', 'ADX'
    ],
    ml_features=[
        'close', 'volume', 'rsi', 'macd', 'macd_signal',
        'bb_upper', 'bb_lower', 'ema', 'sma', 'atr',
        'obv', 'vwap', 'adx'
    ],
    lookback_period=30
)
